/*
* Copyright (c) 2015 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.io.jdbc.spatialite.internal;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryCollection;
import com.vividsolutions.jts.geom.LineString;
import com.vividsolutions.jts.geom.MultiLineString;
import com.vividsolutions.jts.geom.MultiPoint;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.geom.Point;
import com.vividsolutions.jts.geom.Polygon;
/**
* {@link SpatiaLiteSupport} implementation supporting SpatiaLite version 4.0.0
* or higher.
*
* @author Stefano Costa, GeoSolutions
*/
public class SpatiaLiteSupportVersion4 extends AbstractSpatiaLiteSupport {
/**
* @see eu.esdihumboldt.hale.io.jdbc.spatialite.internal.AbstractSpatiaLiteSupport#getGeometryTypeMetadataSQL()
*/
@Override
protected String getGeometryTypeMetadataSQL() {
return "SELECT srid, geometry_type AS type, coord_dimension FROM geometry_columns WHERE f_table_name = Lower(?) AND f_geometry_column = Lower(?)";
}
/**
* @see eu.esdihumboldt.hale.io.jdbc.spatialite.internal.AbstractSpatiaLiteSupport#getSrsMetadataSQL()
*/
@Override
protected String getSrsMetadataSQL() {
return "SELECT auth_srid, auth_name, srtext FROM spatial_ref_sys WHERE srid = ?";
}
@Override
protected String getSrsMetadataFromAuthSQL() {
return "SELECT auth_srid, auth_name, srtext, srid FROM spatial_ref_sys WHERE auth_name = ? AND auth_srid = ?";
}
/**
* @see eu.esdihumboldt.hale.io.jdbc.spatialite.internal.AbstractSpatiaLiteSupport#getGeometryType(java.lang.Object)
*/
@Override
protected Class<? extends Geometry> getGeometryType(Object type) {
Integer geomType = Integer.class.cast(type);
Class<? extends Geometry> geometryClass = null;
int geomSelector = geomType % 1000;
switch (geomSelector) {
case 1:
geometryClass = Point.class;
break;
case 2:
geometryClass = LineString.class;
break;
case 3:
geometryClass = Polygon.class;
break;
case 4:
geometryClass = MultiPoint.class;
break;
case 5:
geometryClass = MultiLineString.class;
break;
case 6:
geometryClass = MultiPolygon.class;
break;
case 7:
geometryClass = GeometryCollection.class;
break;
case 0:
geometryClass = Geometry.class;
break;
default:
// should never happen
break;
}
return geometryClass;
}
/**
* @see eu.esdihumboldt.hale.io.jdbc.spatialite.internal.AbstractSpatiaLiteSupport#getCoordDimensionAsInt(java.lang.Object)
*/
@Override
protected int getCoordDimensionAsInt(Object coordDimension) {
// TODO: consider deriving this from geometry type
return Integer.class.cast(coordDimension);
}
}